package com.project.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.project.dto.Result;
import com.project.utils.ObjectUtils;

import java.util.List;

/**
 * 所有Congtroller的基类
 */
public abstract class BaseController {
    /**
     * 响应返回结果，并将结果转换为DTO
     * @param <Src> 实体类
     * @param <Target> DTO
     * @return 操作结果
     */
    protected <Src, Target> Result<Target> success(Src src, Class<Target> clazz) {
        Target target = ObjectUtils.convert(src, clazz);
        if (target != null) {
            return Result.success(target);
        }

        return Result.error("对象为空");
    }

    /**
     * 响应返回结果，并将结果转换为DTO集合
     * @return 操作结果
     */
    protected <Src, Target> Result<List<Target>> success(List<Src> src, Class<Target> clazz) {
        List<Target> target = ObjectUtils.convert(src, clazz);

        if (target == null || target.size() == 0) {
            return Result.error("对象列表为空");
        }

        return Result.success(target);
    }

    /**
     * 响应返回结果，并将结果转换为IPage<Target>集合
     * @return 操作结果
     */
    protected <Src, Target> Result<IPage<Target>> success(IPage<Src> src, Class<Target> clazz) {
        IPage<Target> target = ObjectUtils.convert(src, clazz);

        if (target == null || target.getSize() == 0) {
            return Result.error("对象列表为空");
        }

        return Result.success(target);
    }

    /**
     * 响应返回结果
     * @return 操作结果
     */
    protected <Target> Result<Target> success(Target obj) {
        if (obj != null) {
            return Result.success(obj);
        }

        return Result.error("对象不存在！");
    }

    /**
     * 返回成功
     */
    protected Result success() {
        return Result.success();
    }

    /**
     * 返回失败消息
     */
    protected Result error(String message) {
        return Result.error(message);
    }

    /**
     * 返回失败消息和结果
     * @return 操作结果
     */
    protected <Target> Result<Target> error(String msg, Target obj) {
        return Result.error(msg,obj);
    }

}
